#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 200010;
int st[N];
int a[N];
void solve(){
int n,m;cin>> n >> m;
for(int i=1;i<=n;i++)cin>> a[i];
int x = 0,y = 0;
for(int i=1;i<=m;i++)st[i] = 0;
for(int i=1;i<=n;i++){
if(a[i]==-1)x++;
else if(a[i]==-2)y++;
else st[a[i]]=1;
}
int ans = 0;
for(int i=m;i;i--){
if(st[i])ans++;
}
int k = m-ans;
int cnt = 0;
int res = 0;
for(int i=1;i<=m;i++){
if(st[i])
res = max(res,ans+min(x,cnt)+min(y,k-cnt));
else
cnt ++;
}
res = max(res,max(x,y)+ans);
cout<<min(res,m)<<endl;
}
signed main(){
int _;cin>>_;while(_--)
solve();
}
1627B - Not Sitting | 1663C - Pōja Verdon |
1497A - Meximization | 1633B - Minority |
688B - Lovely Palindromes | 66B - Petya and Countryside |
1557B - Moamen and k-subarrays | 540A - Combination Lock |
1553C - Penalty | 1474E - What Is It |
1335B - Construct the String | 1004B - Sonya and Exhibition |
1397A - Juggling Letters | 985C - Liebig's Barrels |
115A - Party | 746B - Decoding |
1424G - Years | 1663A - Who Tested |
1073B - Vasya and Books | 195B - After Training |
455A - Boredom | 1099A - Snowball |
1651D - Nearest Excluded Points | 599A - Patrick and Shopping |
237A - Free Cash | 1615B - And It's Non-Zero |
1619E - MEX and Increments | 34B - Sale |
1436A - Reorder | 1363C - Game On Leaves |